package com.huawei123.hasee.cniao5store.base;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.os.Handler;

import com.huawei123.hasee.cniao5store.BuildConfig;
import com.huawei123.hasee.cniao5store.di.component.AppComponent;
import com.huawei123.hasee.cniao5store.di.component.DaggerAppComponent;
import com.huawei123.hasee.cniao5store.di.module.AppModule;
import com.zhxu.library.RxRetrofitApp;
import com.zhxu.recyclerview.App;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by luohao on 2017/2/21 0021.
 * App相关辅助类
 */
public class StoreApplication extends App {
    private static List<Activity> activity_List = new ArrayList<Activity>();
    private static StoreApplication appContext;
    public static String Loging_UserName = null;
    private static int mMainThreadId;
    private static Handler mHandler;
    private static int mainThreadId = (int) Thread.currentThread().getId();
    private Handler handler1;
    private AppComponent appComponent;

    // 用单例模式保证MyApplication对象在这个程序中只存在一个
    //得到MyApplication对象的方法，并返回MyApplication对象

    /**
     * 全局context方法
     *
     * @return myContext
     */
    public static StoreApplication getContext() {

        return appContext;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        if (appContext == null) {
            appContext = StoreApplication.this;//创建MyApplication对象
        }

        mHandler = new Handler();
        initApplicationComponent();

        RxRetrofitApp.init(this, BuildConfig.DEBUG);

    }

    /**
     * Dagger2限制作用域需要的在Application中初始化
     */
    private void initApplicationComponent() {
        appComponent = DaggerAppComponent.builder()
                .appModule(new AppModule(this)).build();

    }

    public AppComponent getApplicationComponent() {
        return appComponent;
    }

    /**
     * 返回主线程的pid
     *
     * @return
     */
    public static int getMainThreadId() {
        return mMainThreadId;
    }

    /**
     * 返回Handler
     *
     * @return
     */
    public static Handler getHandler() {
        return mHandler;
    }


    public AppComponent getAppComponent() {
        return appComponent;
    }


    /**
     * 项目MultiDex分包适配，多版本适配
     *
     * @return
     */
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        //        MultiDex.install(this);
    }


    /**
     * 获取应用程序名称
     */
    public static String getAppName(Context context) {
        try {
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            int labelRes = packageInfo.applicationInfo.labelRes;
            return context.getResources().getString(labelRes);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * [获取应用程序版本名称信息]
     *
     * @param context
     * @return 当前应用的版本名称
     */
    public static String getVersionName(Context context) {
        try {
            PackageManager packageManager = context.getPackageManager();
            PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
            return packageInfo.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 2  * 获取版本号
     * 3  * @return 当前应用的版本号
     * 4
     */
    public static int getVersionCode(Context context) {
        try {
            PackageManager manager = context.getPackageManager();
            PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
            int version = info.versionCode;
            return version;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return -1;
    }

    /**
     * 检查路径并，并复制文件到目录中
     */
    private void CheckSystemDir() {
        //        //检查系统目录是否存在
        //        CommonUtils.CheckSystemDir();//创建项目文件夹
        //        //初始化字体
        //        if (FileUtils.exists(Constant.dir_font + "msyh.ttf") == false)
        //            FileUtils.CopyFormResources(this, R.raw.msyh, Constant.dir_font + "微软雅黑.ttf");
        //        if (FileUtils.exists(Constant.dir_font + "msyhbd.ttc") == false)
        //            FileUtils.CopyFormResources(this, R.raw.msyhbd, Constant.dir_font + "微软雅黑粗体.ttf");
        //        if (FileUtils.exists(Constant.dir_font + "simfang.ttf") == false)
        //            FileUtils.CopyFormResources(this, R.raw.simfang, Constant.dir_font + "仿宋.ttf");
        //        if (FileUtils.exists(Constant.dir_font + "simhei.ttf") == false)
        //            FileUtils.CopyFormResources(this, R.raw.simhei, Constant.dir_font + "黑体.ttf");
        //        if (FileUtils.exists(Constant.dir_font + "simkai.ttf") == false)
        //            FileUtils.CopyFormResources(this, R.raw.simkai, Constant.dir_font + "楷体.ttf");
        //        if (FileUtils.exists(Constant.dir_font + "simsun.ttf") == false)
        //            FileUtils.CopyFormResources(this, R.raw.simsun, Constant.dir_font + "宋体.ttc");
    }

    //    /**
    //     * 首次运行程序进行初始化
    //     *
    //     * @return
    //     */
    //    public static void Initialization(Context context, final Initialization.ResultFace callBack) {
    //        final SharedPreferences preferences = context.getApplicationContext().getSharedPreferences(
    //                "iweqoldfi445ds4dswidpd55d2ifdieduud", Context.MODE_MULTI_PROCESS);
    //        final int now_app_version_code = getVersionCode(context);
    //        boolean isRunInitialization = false; //是否进行数据初始化
    //        //是首次运行
    //        if (preferences == null) {
    //            isRunInitialization = true;
    //        } else { //不是首次运行
    //            //判断是否是更新程序后首次运行
    //            int old_app_version_code = preferences.getInt("app_version_code", 0);
    //            if (old_app_version_code != now_app_version_code) {
    //                //是首次运行更新后的程序
    //                isRunInitialization = true;
    //            }
    //        }
    //
    //        if (isRunInitialization) {
    //            //进行数据初始化
    //            Initialization initialization = new Initialization();
    //            initialization.init(context, new Initialization.ResultFace() {
    //                @Override
    //                public void Result(Boolean value) {
    //                    if (value) {
    //                        //不是首次运行写入程序版本号
    //                        SharedPreferences.Editor editor = preferences.edit();
    //                        editor.putInt("app_version_code", now_app_version_code);
    //                        editor.commit();
    //                    }
    //                    callBack.Result(value);
    //                }
    //            });
    //        } else {
    //            //不是首次运行写入程序版本号
    //            SharedPreferences.Editor editor = preferences.edit();
    //            editor.putInt("app_version_code", now_app_version_code);
    //            editor.commit();
    //            callBack.Result(true);
    //        }
    //    }
}
